package org.example.flea_market_mvc.service.shoppingcarts;

import org.example.flea_market_mvc.entity.ShoppingCarts;
import org.example.flea_market_mvc.param.ShoppingCartParam;

import java.util.List;

/**
 * 购物车服务接口
 * 负责购物车相关的业务逻辑，包括购物车的增删改查、用户/游客购物车处理等
 */
public interface ShoppingCartsService {

    /**
     * 插入购物车记录
     * @param shoppingCartParam 购物车参数对象
     * @return 插入成功返回1，失败返回0
     */
    int insert(ShoppingCartParam shoppingCartParam);

    /**
     * 根据ID删除购物车记录
     * @param id 购物车项ID
     * @return 删除成功返回1，失败返回0
     */
    int deleteById(Integer id);

    /**
     * 更新购物车记录
     * @param shoppingCartParam 购物车参数对象（含更新信息）
     * @return 更新成功返回1，失败返回0
     */
    int update(ShoppingCartParam shoppingCartParam);

    /**
     * 根据ID查询购物车记录
     * @param id 购物车项ID
     * @return 购物车实体对象，未找到返回null
     */
    ShoppingCarts selectById(Integer id);

    /**
     * 查询所有购物车记录
     * @return 购物车实体列表
     */
    List<ShoppingCarts> selectAll();

    /**
     * 根据用户ID分页查询购物车
     * @param userId 用户ID
     * @return 购物车实体列表
     */
    List<ShoppingCarts> selectByUserId(Integer userId);

    /**
     * 根据用户ID和商品ID查询购物车项
     * @param userId 用户ID
     * @param productId 商品ID
     * @return 购物车实体对象，未找到返回null
     */
    ShoppingCarts selectByUserIdAndProductId(Integer userId, Integer productId);

    /**
     * 根据会话ID查询游客购物车
     * @param sessionId 会话ID
     * @return 游客购物车实体列表
     */
    List<ShoppingCarts> selectBySessionId(String sessionId);

    /**
     * 批量更新购物车状态（逻辑删除）
     * @param cartIds 购物车项ID列表
     * @param status 目标状态（0-正常，1-已删除）
     * @return 更新成功的记录数
     */
    int updateStatusBatch(List<Integer> cartIds, Integer status);

    /**
     * 清空用户购物车
     * @param userId 用户ID
     * @return 删除成功的记录数
     */
    int deleteByUserId(Integer userId);

    int updateCartQuantity(Integer id, Integer data);
}